/* aca agregen las funciones que crearon
(que ocupen la base datos o que creen ventanas)
 y que creen que puedan ser utiles a otro */
#include "util.h"
#include <stdio.h>
#include <stdlib.h>

void print_usuario(WINDOW * win,int y,char *formato,int item,nodo_usuario * usuario);
void actListaU(WINDOW * Wlista,char * formato, nodo_usuario * usuario,int inicial,int max);
static void actListaP2(WINDOW * Wlista, FUNC_LISTA * funciones, nodo_producto * producto,int inicial,int max,int tipo);
static void print_product(WINDOW * win,int y,char *formato,int item,nodo_producto * producto);
static void actListaP(WINDOW * Wlista,char * formato, res_busq_p * prods,int inicial,int max);
void liberar_char_array(char **char_array);

//retorna el que queda como nodo inicial,
res_busq_p * mostrarListaP(res_busq_p * productos,int (*func)(res_busq_p * dato, int pos))
{
    int tecla,pos_ant = -1, pos_ac= 0,maxy=LINES-4;//nitems=0;
    int item_actual=1,item_antiguo=1,i=0, esqsv=3;
    bool stop = FALSE;
    WINDOW *Wlista1;
    WINDOW * Wbody=obt_win_cuerpo();
    res_busq_p *anterior=NULL,*temp=productos;
    char fmt1[60];
    curs_set(0);
    sprintf(fmt1," %%-4i %c %%-52.52s %c %%-52.52s %c %%-12.12s %c $%%-7i %c %%-4i",179,179,179,179,179);
    caja_color(Wbody, COLOR_ETIQ, 0);
    if(!(Wlista1=subwin(Wbody,maxy, COLS, esqsv, 0)))
    {
        msg_estado("ERROR!!!!");
        return productos;
    }
    caja_color(Wlista1, COLOR_CUERPO, 0);
    actListaP(Wlista1,fmt1, productos,1,maxy);
    keypad(Wlista1,1);
    scrollok(Wlista1,1);
    mvwprintw(Wbody,0,0," %-4.4s %c %-52.52s %c %-52.52s %c %-12.12s %c %-7.7s  %c %-5.5s","Num",179,"Nombre producto",179,
              "Descripcion",179,"Codigo",179,"Precio",179,"Stock");
    wrefresh(Wbody);
    msg_estado("<- para retroceder una pagina, -> para avanzar una pagina");
    while (!stop)
    {
        if (pos_ac != pos_ant)
        {
            if (pos_ant != -1)
                print_product(Wlista1,pos_ant,fmt1,item_antiguo,anterior->prod);
            setear_color(Wlista1,COLOR_MENU_PRINCIPAL_SEL);
            print_product(Wlista1,pos_ac,fmt1,item_actual,temp->prod);
            setear_color(Wlista1, COLOR_CUERPO);
            pos_ant = pos_ac;
            wrefresh(Wlista1);
        }
        switch (tecla = wgetch(Wlista1))
        {
        case '\n':
            touchwin(Wbody);
            wrefresh(Wbody);
            if((anterior=temp->sig))
                ;
            else
            {
                anterior=temp->ant;
                if(pos_ac)
                    pos_ac--;
                else
                    pos_ac=maxy-1;
                item_actual--;
            }
            //aca se ejecuta la funcion
            switch((*func)(temp,(maxy+esqsv)/2)) //si se modifico la lista
            {
            case 1: //actualiza solo el item actual
                break;
            case 2: //elimina
                temp=anterior;
                if(temp==NULL||temp->ant==NULL)
                    productos=temp;
                for(i=0; temp&&(temp->ant)&&(i<pos_ac); i++,temp=temp->ant);
                if(temp)
                {
                    actListaP(Wlista1,fmt1,temp,item_actual-pos_ac,maxy);
                    temp=anterior;
                }
                else stop = 1;
                break;
            case 3: //imprime desde el inicio
                pos_ac = 0;
                item_actual = 1;
                temp=productos;
                actListaP(Wlista1,fmt1,temp,item_actual,maxy);
                break;
            case 4: //actualiza la pagina
                anterior=temp;
                for(i=0; temp&&i<pos_ac; temp=temp->ant,i++);
                actListaP(Wlista1,fmt1,temp,item_actual-pos_ac,maxy);
                temp=anterior;
            default:
                break;
            }
            pos_ant = -1;
            break;
        case KEY_UP:
            if(temp->ant)
            {
                if(pos_ac==0)
                {
                    anterior=temp->ant;
                    for(i=0; (temp->ant)&&(i<maxy); temp=temp->ant,i++); //vuelve (maxy) items atras!!
                    actListaP(Wlista1,fmt1,temp,item_actual-maxy,maxy);
                    temp=anterior;
                    pos_ac=maxy-1;
                    pos_ant=-1;//pa que no desactive el anterior, por que no hay anterior
                }
                else
                {
                    anterior=temp;
                    temp=temp->ant;
                    pos_ac = (pos_ac - 1) % maxy;
                }
                item_antiguo=item_actual;
                item_actual--;
            }
            break;
        case KEY_DOWN:
            if(temp->sig)
            {
                item_antiguo=item_actual;
                item_actual++;
                if(pos_ac==(maxy-1))
                {
                    actListaP(Wlista1,fmt1,temp->sig,item_actual,maxy);
                    pos_ant=-1;
                }
                anterior=temp;
                temp=temp->sig;
                pos_ac = (pos_ac + 1) % maxy;
            }
            break;
        case KEY_LEFT:
            anterior=temp;
            for(i=0; (temp->ant)&&(i<pos_ac+maxy); temp=temp->ant,i++); //retrocede temp...
            if(i==(maxy+pos_ac)) //si retocedio (maxy+pos_ac) items
            {
                item_actual-=pos_ac+maxy; //fija la numeracion, la primera columa
                actListaP(Wlista1,fmt1,temp,item_actual,maxy); //muestra en pantalla desde el producto que corresponde
                pos_ac = 0; //deja seleccionado el primer producto
            }
            else temp=anterior;
            pos_ant=-1; //pa que no borre la seleecion anterior, y afue borrada por act_lista o no se hicieron cambios
            break;
        case KEY_RIGHT:
            anterior=temp;
            for(i=0; (temp->sig)&&(i<(maxy-pos_ac)); temp=temp->sig,i++); //avanza temp..
            if(i==(maxy-pos_ac))
            {
                item_actual+=(maxy-pos_ac);
                actListaP(Wlista1,fmt1,temp,item_actual,maxy);
                pos_ac = 0;
            }
            else temp=anterior;
            pos_ant=-1;
            break;
        case KEY_ESC:
            stop = TRUE;
            break;
        }
    }
    werase(Wlista1);
    delwin(Wlista1);
    werase(Wbody);
    caja_color(Wbody, COLOR_CUERPO, 0);
    touchwin(Wbody);
    wrefresh(Wbody);
    return productos;
}

void actListaP(WINDOW * Wlista,char * formato, res_busq_p * prods,int inicial,int max)
{
    int i=0;
    res_busq_p *p = prods;
    nodo_producto *producto=NULL;
    werase(Wlista);
    do
    {
        producto=p->prod;
        print_product(Wlista,i,formato,i+inicial,producto);
        i++;
    }
    while((p=p->sig)&&(i<max));
    touchwin(Wlista);
    wrefresh(Wlista);
}

//tipo 0: lista principal, tipo 1: resultado de busqueda
nodo_producto * mostrarListaP2(nodo_producto * productos,FUNC_LISTA * lista,int tipo)
{
    int tecla,pos_ant = -1, pos_ac= 0,maxy=LINES-4;//nitems=0;
    int item_actual=1,item_antiguo=1,i=0, esqsv=3;
    bool stop = FALSE;
    WINDOW *Wlista1;
    WINDOW * Wbody=obt_win_cuerpo();
    nodo_producto *anterior=NULL,*temp=productos,*aux;
    curs_set(0);
    caja_color(Wbody, COLOR_ETIQ, 0);
    if(!(Wlista1=subwin(Wbody,maxy, COLS, esqsv, 0)))
    {
        msg_estado("ERROR!!!!");
        return productos;
    }
    caja_color(Wlista1, COLOR_CUERPO, 0);
    actListaP2(Wlista1,lista, productos,1,maxy,tipo);
    keypad(Wlista1,1);
    scrollok(Wlista1,1);
    wprintw(Wbody,lista->etiqueta);
    wrefresh(Wbody);
    msg_estado("<- para retroceder una pagina, -> para avanzar una pagina");
    while (!stop)
    {
        if (pos_ac != pos_ant)
        {
            if (pos_ant != -1)
                (*lista->print_nodo)(Wlista1,pos_ant,lista->fmtnod,item_antiguo,anterior);
            setear_color(Wlista1,COLOR_MENU_PRINCIPAL_SEL);
            (*lista->print_nodo)(Wlista1,pos_ac,lista->fmtnod,item_actual,temp);//print_product(Wlista1,pos_ac,fmt[0],item_actual,temp);
            setear_color(Wlista1, COLOR_CUERPO);
            pos_ant = pos_ac;
            wrefresh(Wlista1);
        }
        switch (tecla = wgetch(Wlista1))
        {
        case '\n':
            if(lista->func)
            {
                touchwin(Wbody);
                wrefresh(Wbody);
                if((anterior=tipo?temp->sig2:temp->sig))
                {
                    i=0;
                    aux=tipo?temp->ant2:temp->ant;
                }
                else
                {
                    anterior=tipo?temp->ant2:temp->ant;
                    i=1;
                }
                //aca se ejecuta la funcion
                switch((*(lista->func))(temp,(maxy+esqsv)/2)) //si se modifico la lista
                {
                case 1: //actualiza solo el item actual
                    break;
                case 2: //elimina
                    if(i)
                    {
                        if(pos_ac)
                            pos_ac--;
                        else
                            pos_ac=maxy-1;
                        item_actual--;
                        if(anterior!=NULL)
                        {
                            if(tipo)
                                anterior->sig2=NULL;
                            else anterior->sig=NULL;
                        }
                    }
                    else
                    {
                        if(aux)
                        {
                            if(tipo)
                            {
                                aux->sig2=anterior;
                                anterior->ant2=aux;
                            }
                            else
                            {
                                aux->sig=anterior;
                                anterior->ant=aux;
                            }
                        }
                    }
                    temp=anterior;
                    if(temp==NULL||((tipo?temp->ant2:temp->ant)==NULL))
                        productos=temp;
                    if(tipo)
                        for(i=0; temp&&(temp->ant2)&&(i<pos_ac); i++,temp=temp->ant2);
                    else for(i=0; temp&&(temp->ant)&&(i<pos_ac); i++,temp=temp->ant);
                    //retocede
                    if(temp)
                    {
                        actListaP2(Wlista1,lista,temp,item_actual-pos_ac,maxy,tipo);
                        temp=anterior;
                    }
                    else stop = 1;
                    break;
                case 3: //imprime desde el inicio
                    pos_ac = 0;
                    item_actual = 1;
                    temp=productos;
                    actListaP2(Wlista1,lista,temp,item_actual,maxy,tipo);
                    break;
                case 4: //actualiza la pagina
                    if(!tipo)
                    {
                        anterior=temp;
                        if(tipo)
                            for(i=0; temp&&i<pos_ac; temp=temp->ant2,i++);
                        else for(i=0; temp&&i<pos_ac; temp=temp->ant,i++);
                        actListaP2(Wlista1,lista,temp,item_actual-pos_ac,maxy,tipo);
                        temp=anterior;
                    }
                default:
                    break;
                }
                pos_ant = -1;
            }
            break;
        case KEY_UP:
            if(tipo?temp->ant2:temp->ant)
            {
                if(pos_ac==0)
                {
                    anterior=tipo?temp->ant2:temp->ant;
                    if(tipo)
                        for(i=0; (temp->ant2)&&(i<maxy); temp=temp->ant2,i++); //vuelve (maxy) items atras!!
                    else
                        for(i=0; (temp->ant)&&(i<maxy); temp=temp->ant,i++); //vuelve (maxy) items atras!!
                    actListaP2(Wlista1,lista,temp,item_actual-maxy,maxy,tipo);
                    temp=anterior;
                    pos_ac=maxy-1;
                    pos_ant=-1;//pa que no desactive el anterior, por que no hay anterior
                }
                else
                {
                    anterior=temp;
                    temp=tipo?temp->ant2:temp->ant;
                    pos_ac = (pos_ac - 1) % maxy;
                }
                item_antiguo=item_actual;
                item_actual--;
            }
            break;
        case KEY_DOWN:
            if(tipo?temp->sig2:temp->sig)
            {
                item_antiguo=item_actual;
                item_actual++;
                if(pos_ac==(maxy-1))
                {
                    actListaP2(Wlista1,lista,tipo?temp->sig2:temp->sig,item_actual,maxy,tipo);
                    pos_ant=-1;
                }
                anterior=temp;
                temp=tipo?temp->sig2:temp->sig;
                pos_ac = (pos_ac + 1) % maxy;
            }
            break;
        case KEY_LEFT:
            anterior=temp;
//            for(i=0; (tipo?temp->ant2:temp->ant)&&(i<pos_ac+maxy); temp=tipo?temp->ant2:temp->ant,i++); //retrocede temp...
            if(tipo)
                for(i=0; (temp->ant2)&&(i<pos_ac+maxy); temp=temp->ant2,i++);
            else for(i=0; (temp->ant)&&(i<pos_ac+maxy); temp=temp->ant,i++);
            if(i==(maxy+pos_ac)) //si retocedio (maxy+pos_ac) items
            {
                item_actual-=pos_ac+maxy; //fija la numeracion, la primera columa
                actListaP2(Wlista1,lista,temp,item_actual,maxy,tipo); //muestra en pantalla desde el producto que corresponde
                pos_ac = 0; //deja seleccionado el primer producto
            }
            else temp=anterior;
            pos_ant=-1; //pa que no borre la seleecion anterior, y afue borrada por act_lista o no se hicieron cambios
            break;
        case KEY_RIGHT:
            anterior=temp;
            if(tipo)
                for(i=0; (temp->sig2)&&(i<(maxy-pos_ac)); temp=temp->sig2,i++);
            else for(i=0; (temp->sig)&&(i<(maxy-pos_ac)); temp=temp->sig,i++);
            if(i==(maxy-pos_ac))
            {
                item_actual+=(maxy-pos_ac);
                actListaP2(Wlista1,lista,temp,item_actual,maxy,tipo);
                pos_ac = 0;
            }
            else temp=anterior;
            pos_ant=-1;
            break;
        case KEY_ESC:
            stop = TRUE;
            break;
        }
    }
    werase(Wlista1);
    delwin(Wlista1);
    werase(Wbody);
    caja_color(Wbody, COLOR_CUERPO, 0);
    touchwin(Wbody);
    wrefresh(Wbody);
    return productos;
}

void actListaP2(WINDOW * Wlista, FUNC_LISTA * funciones, nodo_producto * producto,int inicial,int max,int tipo)
{
    int i=0;
    char * fmtnod=funciones->fmtnod;
    werase(Wlista);
    if(tipo)
    {
        do
        {
            (*funciones->print_nodo)(Wlista,i,fmtnod,i+inicial,producto);//   print_product(Wlista,i,formato[0],i+inicial,producto);
            i++;
        }
        while((producto=producto->sig2)&&(i<max));
    }
    else
        do
        {
            (*funciones->print_nodo)(Wlista,i,fmtnod,i+inicial,producto);
            i++;
        }
        while((producto=producto->sig)&&(i<max));
    while(i<max)
    {
        (*funciones->pnodonulo)(Wlista,i,funciones->fmtnul);
        i++;
    }
    touchwin(Wlista);
    wrefresh(Wlista);
}

void print_product(WINDOW * win,int y,char *formato,int item,nodo_producto * producto)
{
    mvwprintw(win,y,0,formato,item,producto->nombre,producto->descripcion,producto->codigo,producto->precio,
              producto->compra,producto->stock);
}

void print_product2(WINDOW * ventana,int posy,char * fmt,int enume,nodo_producto * producto)
{
    mvwprintw(ventana,posy,0,fmt,enume,producto->nombre,producto->descripcion,producto->codigo,producto->precio,
              producto->compra,producto->stock);
}

void print_nodopnulo(WINDOW * Wlista, int posy,char * fmt)
{
    mvwprintw(Wlista,posy,0,fmt,"","","","","","","");
}

//retorna el que queda como nodo inicial,
nodo_usuario * mostrarListaU(nodo_usuario * usuarios,int (*func)(nodo_usuario * dato, int pos))
{
    int tecla,pos_ant = -1, pos_ac= 0,maxy=LINES-4;//nitems=0;
    int item_actual=1,item_antiguo=1,i=0, esqsv=3;
    bool stop = FALSE;
    WINDOW *Wlista1;
    WINDOW * Wbody=obt_win_cuerpo();
    nodo_usuario *anterior=NULL,*temp=usuarios;
    char fmt1[2][100];
    //se debe cumplir (n+1)*2+sum(fmt)=ancho=150, n: numero de separadores, fmt, suma de los espacios asignados para cada campo
#ifdef _WIN32
    sprintf(fmt1[0]," %%-4i %c %%-20.20s %c %%-20.20s %c %%-4i - %%-4i %c $%%-15i %c $%%-15i %c $%%-15i %c $%%-15i",
            179,179,179,179,179,179,179);
    sprintf(fmt1[1]," %%-4.4s %c %%-20.20s %c %%-20.20s %c %%-11.11s %c %%-16.16s %c %%-16.16s %c %%-16.16s %c %%-16.16s",
            179,179,179,179,179,179,179);
#else
    sprintf(fmt1[0]," %%-4i | %%-20.20s | %%-20.20s | %%-4i - %%-4i | $%%-15i | $%%-15i | $%%-15i | $%%-15i");
    sprintf(fmt1[1]," %%-4.4s | %%-20.20s | %%-20.20s | %%-11.11s | %%-16.16s | %%-16.16s | %%-16.16s | %%-16.16s");
#endif
    curs_set(0);
    caja_color(Wbody, COLOR_ETIQ, 0);
    if(!(Wlista1=subwin(Wbody,maxy, COLS, esqsv, 0)))
    {
        msg_estado("ERROR!!!!");
        return usuarios;
    }
    caja_color(Wlista1, COLOR_CUERPO, 0);
    actListaU(Wlista1,fmt1[0], usuarios,1,maxy);
    keypad(Wlista1,1);
    scrollok(Wlista1,1);
    mvwprintw(Wbody,0,0,fmt1[1],"Num","Nombre","Tipo de usuario","Dia  -  Mes","Diario","Semanal","Mensual","Total");
    wrefresh(Wbody);
    msg_estado("<- para retroceder una pagina, -> para avanzar una pagina");
    while (!stop)
    {
        if (pos_ac != pos_ant)
        {
            if (pos_ant != -1)
                print_usuario(Wlista1,pos_ant,fmt1[0],item_antiguo,anterior);
            setear_color(Wlista1,COLOR_MENU_PRINCIPAL_SEL);
            print_usuario(Wlista1,pos_ac,fmt1[0],item_actual,temp);
            setear_color(Wlista1, COLOR_CUERPO);
            pos_ant = pos_ac;
            wrefresh(Wlista1);
        }
        switch (tecla = wgetch(Wlista1))
        {
        case '\n':
            touchwin(Wbody);
            wrefresh(Wbody);
            if((anterior=temp->sig))
                ;
            else
                anterior=temp->ant;
            //aca se ejecuta la funcion
            switch((*func)(temp,(maxy+esqsv)/2)) //si se modifico la lista
            {
            case 1: //actualiza solo el item actual
                break;
            case 2: //elimina
                temp=anterior;
                if(pos_ac)
                    pos_ac--;
                else
                    pos_ac=maxy-1;
                item_actual--;
                if(temp==NULL||temp->ant==NULL)
                    usuarios=temp;
                for(i=0; temp&&(temp->ant)&&(i<pos_ac); i++,temp=temp->ant);
                if(temp)
                {
                    actListaU(Wlista1,fmt1[0],temp,item_actual-pos_ac,maxy);
                    temp=anterior;
                }
                else stop = 1;
                break;
            case 3: //imprime desde el inicio
                pos_ac = 0;
                item_actual = 1;
                temp=usuarios;
                actListaU(Wlista1,fmt1[0],temp,item_actual,maxy);
                break;
            default:
                break;
            }
            pos_ant = -1;
            //curs_set(0);
            break;
        case KEY_UP:
            if(temp->ant)
            {
                if(pos_ac==0)
                {
                    anterior=temp->ant;
                    for(i=0; (temp->ant)&&(i<maxy); temp=temp->ant,i++); //vuelve (maxy) items atras!!
                    actListaU(Wlista1,fmt1[0],temp,item_actual-maxy,maxy);
                    temp=anterior;
                    pos_ac=maxy-1;
                    pos_ant=-1;//pa que no desactive el anterior, por que no hay anterior
                }
                else
                {
                    anterior=temp;
                    temp=temp->ant;
                    pos_ac = (pos_ac - 1) % maxy;
                }
                item_antiguo=item_actual;
                item_actual--;
            }
            break;
        case KEY_DOWN:
            if(temp->sig)
            {
                item_antiguo=item_actual;
                item_actual++;
                if(pos_ac==(maxy-1))
                {
                    actListaU(Wlista1,fmt1[0],temp->sig,item_actual,maxy);
                    pos_ant=-1;
                }
                anterior=temp;
                temp=temp->sig;
                pos_ac = (pos_ac + 1) % maxy;
            }
            break;
        case KEY_LEFT:
            anterior=temp;
            for(i=0; (temp->ant)&&(i<pos_ac+maxy); temp=temp->ant,i++); //retrocede temp...
            if(i==(maxy+pos_ac)) //si retocedio (maxy+pos_ac) items
            {
                item_actual-=pos_ac+maxy; //fija la numeracion, la primera columa
                actListaU(Wlista1,fmt1[0],temp,item_actual,maxy); //muestra en pantalla desde el producto que corresponde
                pos_ac = 0; //deja seleccionado el primer producto
            }
            else temp=anterior;
            pos_ant=-1; //pa que no borre la seleecion anterior, y afue borrada por act_lista o no se hicieron cambios
            break;
        case KEY_RIGHT:
            anterior=temp;
            for(i=0; (temp->sig)&&(i<(maxy-pos_ac)); temp=temp->sig,i++); //avanza temp..
            if(i==(maxy-pos_ac))
            {
                item_actual+=(maxy-pos_ac);
                actListaU(Wlista1,fmt1[0],temp,item_actual,maxy);
                pos_ac = 0;
            }
            else temp=anterior;
            pos_ant=-1;
            break;
        case KEY_ESC:
            stop = TRUE;
            break;
        }
    }
    werase(Wlista1);
    delwin(Wlista1);
    werase(Wbody);
    caja_color(Wbody, COLOR_CUERPO, 0);
    touchwin(Wbody);
    wrefresh(Wbody);
    return usuarios;
}

void actListaU(WINDOW * Wlista,char * formato, nodo_usuario * usuario,int inicial,int max)
{
    int i=0;
    werase(Wlista);
    do
    {
        print_usuario(Wlista,i,formato,i+inicial,usuario);
        i++;
    }
    while((usuario=usuario->sig)&&(i<max));
    touchwin(Wlista);
    wrefresh(Wlista);
}

void print_usuario(WINDOW * win,int y,char *formato,int item,nodo_usuario * usuario)
{
    char *tipo;
    switch(usuario->id)
    {
    case ADMIN:
        tipo="Administrador";
        break;
    case VEND:
        tipo="Vendedor";
        break;
    case INV:
        tipo="Invitado";
        break;
    default:
        tipo="NO VALIDO!!";
    }
    mvwprintw(win,y,0,formato,item,usuario->nombre,tipo,usuario->dia.t,usuario->mes_act.t,usuario->dia.dato,usuario->semana.dato,usuario->mes_act.dato,usuario->total);
}

void liberar_char_array(char **char_array)
{
    int i;
    for(i=0; char_array[i]; free(char_array[i]),i++);
    free(char_array);
}

FECHA * obtenerFecha()
{
    FECHA * fecha=(FECHA *)malloc(sizeof(FECHA));
    char temp[30];
    int temp2;
    time_t tiempo = time(0);
    struct tm *tlocal = localtime(&tiempo);
    strftime(temp,50,"%w",tlocal);
    fecha->dia=tlocal->tm_mday;
    fecha->mes=(tlocal->tm_mon)+1;
    fecha->year=1900+tlocal->tm_year;
    temp2=atoi(temp);//se guarda el dia de la semana, 0 es dom, 6 es sabado,
    /*                  */
    fecha->semana=(tlocal->tm_mday-temp2)%7;//cantidad dias "sueltos"
    temp2=temp2?temp2:7;
    if((tlocal->tm_mday-temp2)>=0)
        fecha->semana=(tlocal->tm_mday-fecha->semana+7-temp2)/7;
    else fecha->semana=0;
    return fecha;
}

void printProdStat(WINDOW * ventana,int posy,char * fmt,int enume,nodo_producto * producto)
{
    mvwprintw(ventana,posy,0,fmt,enume,producto->nombre,producto->codigo,producto->total,producto->mes_act.dato,
              producto->mes_ant.dato,producto->mes_ant2.dato,producto->semana.dato,producto->dia.dato);
}

void printProdNulStat(WINDOW * Wlista, int posy,char * fmt)
{
    mvwprintw(Wlista,posy,0,fmt,"","","","","","","","","");
}
